/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Formulario;

import Modelo.Fisico;
import Modelo.Juridico;
import Modelo.Motorista;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.data.JRTableModelDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;

public class Formulario implements Runnable {
    private JasperPrint impressao = null;
    private DadosFormulario comp;
    private Thread barra;
    private JProgressBar barradeprogresso;
    private JLabel label;
    private DadosEmbarque emb;
    private Pessoal pes;
    private Motorista motorista;
    private Juridico jur;
    private Fisico fis;
    private int tipo;

    public Formulario(DadosFormulario f,JProgressBar barra,JLabel label,int tipo){
         this.comp = f;
         this.label = label;
         barradeprogresso = barra;
         this.tipo = tipo;
    }

        public Formulario(DadosEmbarque emb,JProgressBar barra,JLabel label,int tipo){
         this.emb = emb;
         this.label = label;
         barradeprogresso = barra;
         this.tipo = tipo;
    }


    public Formulario(Pessoal pes, JProgressBar barra, JLabel label, int tipo) {
        this.label = label;
        barradeprogresso = barra;
        this.tipo = tipo;
        this.pes = pes;
    }

    public Formulario(Motorista motorista, JProgressBar barra, JLabel label, int tipo) {
        this.motorista = motorista;
         this.label = label;
         barradeprogresso = barra;
         this.tipo = tipo;
    }
     public Formulario(Fisico fis, JProgressBar barra, JLabel label, int tipo) {
        this.fis = fis;
         this.label = label;
         barradeprogresso = barra;
         this.tipo = tipo;
    }
    public Formulario(Juridico jur, JProgressBar barra, JLabel label, int tipo) {
         this.jur = jur;
         this.label = label;
         barradeprogresso = barra;
         this.tipo = tipo;
    }
   public void exibirRelatorio() throws FileNotFoundException, JRException, IOException, InterruptedException
  {
        // Caminho do .jasper do relatorio
          JasperReport relJasper = (JasperReport)JRLoader.loadObject(getClass().getResource("/Formulario/Formulario.jasper"));

          //local da imagem
         java.awt.Image imagemC = obterImagem("/ImagemFormulario/Caminhao.jpg");
         java.awt.Image imagemS = obterImagem("/ImagemFormulario/seguro.jpg");
        // Lista com beans
        List comprovantes = new ArrayList();
        comprovantes.add(comp);

        // O datasource
        JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(comprovantes);

        // Parametros do relatorios
        Map parametros = new HashMap();
        parametros.put("Imagem", imagemC);
        parametros.put("ImagemS",imagemS);
        parametros.put("cnpj",comp.getCnpjEmp());     
        try {

            impressao = JasperFillManager.fillReport(relJasper, parametros, ds);
            JasperViewer viewer = new JasperViewer(impressao, false);
            viewer.setTitle("Comprovante de Seguro");
            viewer.setVisible(true);

        } catch (JRException e) {
          JOptionPane.showMessageDialog(null, e.getMessage());
        }

    }



   private java.awt.Image obterImagem(String caminho) {

        try {
            URL url = getClass().getResource(caminho);
            ImageIcon imageIcon = new ImageIcon(url);
            return imageIcon.getImage();
        } catch (Exception e) {
            // nem achou :(
            e.printStackTrace();
            return null;
        }
    }

   public void iniciarAbarra(){
        this.barra = new Thread(new FicaRodando(barradeprogresso,label));
   }
    public void run() {
                iniciarAbarra();
                try {
                    if(tipo==1)
                        exibirRelatorio();
                    else if(tipo==2)
                        Embarques();
                    else if(tipo==3)
                        producaoPessoal();
                    else if(tipo ==4)
                        ImprimeMotorista();
                    else if(tipo ==5)
                        ImprimeJuridico();
                    else if(tipo==6)
                        ImprimeFisico();
                } catch (FileNotFoundException ex) {
                    JOptionPane.showMessageDialog(null, "erro ao carregar os arquivos");
                } catch (JRException ex) {
                    ex.printStackTrace();
                   JOptionPane.showMessageDialog(null, "erro ao fazer o formulario");
                } catch (IOException ex) {
                   JOptionPane.showMessageDialog(null, "erro ao ler os arquivos");
                } catch (InterruptedException ex){
                JOptionPane.showMessageDialog(null, "erro no processo de criação do arquivo");
            }finally{
                barra.start();
            }
    }
        //passando valores para  um relatorio ireport sem conexao no banco e pegando valores da jtable

    //metodo chamado em um jbutton
    public void Embarques() throws JRException{
            String arquivo = "Formulario/Jtable.jasper"; //arquivo de relatorio
            java.io.InputStream file = getClass().getClassLoader().getResourceAsStream(arquivo); //carrego o arquivo
            JRTableModelDataSource tabela = new JRTableModelDataSource(emb.getTabela()); //aqui eu crio um datasource usando a propria jtable

            Map parametros = new HashMap(); //apenas crio um map, mas nem passo parametro nem nada, os parametros sao as colunas da jtable
            parametros.put("emitente",emb.getEmitente());
            parametros.put("CPF", emb.getCPF());
            parametros.put("responsavel", emb.getResponsavel());
            parametros.put("periodo", emb.getPeriodo());
            parametros.put("desconto", emb.getDesconto());
            parametros.put("valorDesconto",emb.getValorDesconto());
            parametros.put("soma", emb.getSoma());
            parametros.put("total", emb.getValorFinal());
            parametros.put("somaMercadorias", emb.getSomaMercadoria());

            JasperPrint printer = JasperFillManager.fillReport(file, parametros, tabela); //aqui eu passo a jtable(tabela) para o relatorio
           // JasperViewer viewer = new JasperViewer(printer, false);
            JasperViewer viewer = new JasperViewer(printer, false);
            viewer.setTitle("Comprovante de Seguro");
            viewer.setVisible(true);
            /*JRViewer view = new JRViewer(printer); //preview
            JDialog dialog = new JDialog(); //jdialog que contem o preview
            dialog.getContentPane().add(view); //adiciono o preview
            dialog.setSize(1024,760);
            dialog.setModalityType(ModalityType.APPLICATION_MODAL);
            dialog.setModal(true);
            dialog.setVisible(true);*/
        }
        public void producaoPessoal() throws JRException{
               
               java.awt.Image imagemC = obterImagem("/ImagemFormulario/Caminhao.jpg");
               JasperReport relJasper = (JasperReport)JRLoader.loadObject(getClass().getResource("/Formulario/Main.jasper"));
               String diretorio = System.getProperty("user.dir")+File.separator+"src"+File.separator+"Formulario"+File.separator;

                // O datasource
		JRTableModelDataSource tabela = new JRTableModelDataSource(pes.getTabela1());

                // Parametros do relatorios
               Map parametros = new HashMap();
               parametros.put("logo", imagemC);
               parametros.put("responsavel",pes.getResponsavel());
               parametros.put("DATA", pes.getData());
               parametros.put("SUBREPORT_DIR", diretorio);
               parametros.put("ds", pes.getDs());
               parametros.put("sobraDia", pes.getSobraDia());
               parametros.put("totalAntigos", pes.getTotalAntigos());
               parametros.put("totalDia", pes.getTotalDia());
               parametros.put("caixaAnterior", pes.getCaixaAnterior());
               parametros.put("SOMA", pes.getSoma());
               parametros.put("entregue", pes.getEntregue());
               parametros.put("sobraCaixa", pes.getSobraCaixa());
               parametros.put("totalDespesas", pes.getTotalDespesas());
               parametros.put("Embarque", pes.getEmbarque());
               parametros.put("Geral",pes.getGeral());
               parametros.put("Avista",pes.getaVista());
               parametros.put("Faturar", pes.getFaturar());
               parametros.put("Despesas", pes.getDespesas());
               parametros.put("ds2",pes.getDs2());

               JasperPrint printer = JasperFillManager.fillReport(relJasper, parametros,tabela); //aqui eu passo a jtable(tabela) para o relatorio


               JasperViewer viewer = new JasperViewer(printer, false);
               viewer.setTitle("Produçao Diaria");
               viewer.setVisible(true);
        }
        public void ImprimeMotorista() throws JRException{
               java.awt.Image imagemC = obterImagem("/ImagemFormulario/Caminhao.jpg");
               JasperReport relJasper = (JasperReport)JRLoader.loadObject(getClass().getResource("/Formulario/DadosMotorista.jasper"));
               
               List comprovantes = new ArrayList();
               comprovantes.add(motorista);
               
                // O datasource
                JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(comprovantes);
                Map parametros = new HashMap();
                parametros.put("imagem", imagemC);
                 impressao = JasperFillManager.fillReport(relJasper, parametros, ds);
                JasperViewer viewer = new JasperViewer(impressao, false);
                viewer.setTitle("Dados Motorista");
                viewer.setVisible(true);
        }
        public void ImprimeJuridico()throws JRException{
               java.awt.Image imagemC = obterImagem("/ImagemFormulario/Caminhao.jpg");
               JasperReport relJasper = (JasperReport)JRLoader.loadObject(getClass().getResource("/Formulario/DadosClienteJuridico.jasper"));

               List comprovantes = new ArrayList();
               comprovantes.add(jur);

                // O datasource
                JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(comprovantes);
                Map parametros = new HashMap();
                parametros.put("imagem", imagemC);
                 impressao = JasperFillManager.fillReport(relJasper, parametros, ds);
                JasperViewer viewer = new JasperViewer(impressao, false);
                viewer.setTitle("Dados Cliente");
                viewer.setVisible(true);
        }
        public void ImprimeFisico()throws JRException{
                 java.awt.Image imagemC = obterImagem("/ImagemFormulario/Caminhao.jpg");
               JasperReport relJasper = (JasperReport)JRLoader.loadObject(getClass().getResource("/Formulario/DadosClienteFisico.jasper"));

               List comprovantes = new ArrayList();
               comprovantes.add(fis);

                // O datasource
                JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(comprovantes);
                Map parametros = new HashMap();
                parametros.put("imagem", imagemC);
                 impressao = JasperFillManager.fillReport(relJasper, parametros, ds);
                JasperViewer viewer = new JasperViewer(impressao, false);
                viewer.setTitle("Dados Cliente");
                viewer.setVisible(true);
        }
   }
